from django import template
from django.db.models import Count
from django.db.models.functions import TruncMonth

from article.models import Article, CategoryTag, CategoryClass
from blog.models import Adv
from user.models import UserInfo

# 创建一个注册对象
register = template.Library()


# 用装饰器注册
@register.inclusion_tag("inclusion_tags/adv.html")
def home_adv():
    #声明在前端文件使用的数据
    adv_data=Adv.objects.all().order_by("pk")

    # 返回函数的名称空间
    return locals()
@register.inclusion_tag("inclusion_tags/article_left.html")
def article_left(request):
    # 【一】携带参数进来 ： 当前点击的用户对象的用户名
    path = request.get_full_path()
    #切割出用户名
    username = path.split("/")[1]
    # 【二】查询得到当前用户的用户对象
    user_obj = UserInfo.objects.get(username=username)

    # 获取到当前用户下的所有文章和文章分类
    article_category_class_data = CategoryClass.objects.filter(blog=user_obj.blog).annotate(
        # 统计当前用户下各个分类的文章数
        article_num=Count("article__pk")
    ).values("id", "name", "article_num")

    # 获取当前用户下的所有标签和标签下的文章数
    article_category_tag_data = CategoryTag.objects.filter(blog=user_obj.blog).annotate(
        article_num=Count("article__pk")
    ).values("id", "article_num", "name")

    # 获取当前用户下的所有文章并且对文章进行归档和分类
    article_year_month_data = Article.objects.filter(blog=user_obj.blog).annotate(
        month=TruncMonth("create_time")).values("month").annotate(
        article_num=Count("pk")
    ).values("month", "article_num")

    # 获取到当前文章点赞数靠前的文章
    article_recommend_data = Article.objects.filter(blog=user_obj.blog).order_by('-up_num').values("title", "up_num")

    return locals()
@register.inclusion_tag("inclusion_tags/backend_left.html")
def backend_left(request):
    # 获取到当前用户下的所有文章和文章分类
    article_category_class_data = CategoryClass.objects.filter(blog=request.user.blog).annotate(
        # 统计当前用户下各个分类的文章数
        article_num=Count("article__pk")
    ).values("id", "name", "article_num")

    # 获取当前用户下的所有标签和标签下的文章数
    article_category_tag_data = CategoryTag.objects.filter(blog=request.user.blog).annotate(
        article_num=Count("article__pk")
    ).values("id", "article_num", "name")
    return locals()